home *** CD-ROM | disk | FTP | other *** search
- (*******************************************************************************
- : Program. BlitTest.mod
- : Author. Carsten Wartmann (Crazy Video)
- : Address. Wutzkyallee 83, 12353 Berlin
- : Phone. 030/6614776
- : Version. 0.5
- : Date. 16.Aug.1994
- : Copyright. PD
- : Language. Modula-2
- : Compiler. M2Amiga V4.3
- : Contents. Test des Blitters auf der Picasso (Speed) .
- *******************************************************************************)
-
- (*$ LargeVars := FALSE*)
- (*$StackParms := FALSE*)
-
- MODULE BlitTest1 ;
-
-
- FROM SYSTEM IMPORT ADR,ADDRESS,TAG,BITSET,SHIFT,ASSEMBLE ;
-
- FROM UtilityD IMPORT tagEnd,tagDone ;
-
- FROM Arts IMPORT Assert ;
-
- FROM ExecL IMPORT Forbid,Permit,AllocMem,FreeMem,CopyMem ;
- FROM ExecD IMPORT MemReqs,MemReqSet ;
-
- FROM DosL IMPORT Delay ;
-
- FROM GraphicsL IMPORT SetRGB4 ;
-
- FROM IntuitionD IMPORT ScreenPtr ;
- FROM IntuitionL IMPORT ScreenToFront ;
-
- FROM RandomNumber IMPORT RND ;
-
- FROM VilIntuiSupL IMPORT OpenVillageScreenTagList,CloseVillageScreen,
- LockVillageScreen,UnLockVillageScreen,
- VillageRectFill,VillageBlitCopy,WaitVillageBlit,
- VillageModeRequest,VillageSetDisplayBuf,VillageGetBufAddr ;
- FROM VilIntuiSupD IMPORT SetPackedPixel,LinePacked,ClearScreen,ClearBuf,
- VilFillRecord,VilCopyRecord,VilScrCopy,VilScrAnd,
- VilDstInvert,VilScrPaint,TavisTags,InvalidID ;
-
- FROM FileSystem IMPORT Lookup,File,Close,ReadChar,done,ReadBytes,SetPos ;
-
- FROM InOut IMPORT WriteInt,WriteLn,WriteString,Write,WriteCard,WriteHex ;
-
- FROM String IMPORT Compare ;
-
- FROM Break IMPORT InstallException ;
-
- FROM Timer2 IMPORT StartTime,StopTime,TimeVal ;
-
- IMPORT R ;
-
-
-
- VAR cia[0BFE000H] : BITSET ;
- Joy1[0DFF00CH] : BITSET ;
-
- time : TimeVal ;
- tags : ARRAY [0..40] OF LONGCARD ;
- scr : ScreenPtr ;
-
- start : ADDRESS ;
- kugeln : ARRAY [0..9] OF ADDRESS ;
- copy : VilCopyRecord ;
-
- mode,x,y,
- i : LONGCARD ;
-
- ok : LONGINT ;
-
-
-
-
-
-
- PROCEDURE Rechts() : BOOLEAN ;
- BEGIN
- RETURN (1 IN Joy1) ;
- END Rechts ;
-
- PROCEDURE Links() : BOOLEAN ;
- BEGIN
- RETURN (9 IN Joy1) ;
- END Links ;
-
- PROCEDURE XOR(a,b : BOOLEAN) : BOOLEAN ;
- BEGIN
- RETURN ((a OR b) AND NOT (a AND b)) ;
- END XOR ;
-
- PROCEDURE Unten() : BOOLEAN ;
- BEGIN
- RETURN XOR(Rechts(),(0 IN Joy1)) ;
- END Unten ;
-
- PROCEDURE Oben() : BOOLEAN ;
- BEGIN
- RETURN XOR(Links(),(8 IN Joy1)) ;
- END Oben ;
-
-
- PROCEDURE WaitMaus(delay : INTEGER) ;
- BEGIN
- WHILE (6 IN cia) DO
- END ;
- Delay(delay) ;
- END WaitMaus ;
-
-
- PROCEDURE Erg(elap : TimeVal) ;
- BEGIN
- WriteLn ;
- WriteString("Ergebnis : ") ;
- WriteInt(elap.secs,6) ;
- WriteInt(elap.micro,10) ;
- WriteLn ;
- END Erg ;
-
-
- (* Liest BMP in einen Speicherbereich *)
- PROCEDURE ReadBMP(name : ARRAY OF CHAR ; w,h : LONGCARD) : ADDRESS ;
- VAR f : File ;
- act,i,
- y : LONGINT ;
- start,
- cnt : ADDRESS ;
-
- BEGIN
- start := AllocMem(w*h,MemReqSet{fast}) ;
- Assert(start#NIL,ADR("Kein Speicher !")) ;
-
- Lookup(f,name,40000,FALSE) ;
- Assert(f.res=done,ADR("Kann File nicht öffnen !")) ;
-
- (* Warum stehen BMP-Bilder auf dem Kopf ?
- SetPos(f,1078) ;
- ReadBytes(f,start,w*h,act) ;
- IF (act<LONGINT(w*h)) THEN
- Close(f) ;
- Assert(FALSE,ADR("Fehler beim Bildlesen (w*h?) !")) ;
- END ;
- *)
- cnt := start ;
- SetPos(f,1078) ;
- INC(cnt,w*(h-1)) ;
- FOR y:=1 TO h DO
- ReadBytes(f,cnt,w,act) ;
- DEC(cnt,w) ;
- END ;
-
- Close(f) ;
- RETURN(start) ;
-
- END ReadBMP ;
-
- (* Extrahiert die Palette eines BMP *)
- PROCEDURE ReadPAL(name : ARRAY OF CHAR ; scr : ScreenPtr) ;
- VAR f : File ;
- act,i,
- col : LONGINT ;
- r,g,b,
- s : SHORTCARD ;
-
- BEGIN
- Lookup(f,name,10000,FALSE) ;
- Assert(f.res=done,ADR("Kann File nicht öffnen !")) ;
-
- SetPos(f,54) ;
- FOR col:=0 TO 255 DO
- ReadBytes(f,ADR(b),1,act) ;
- ReadBytes(f,ADR(g),1,act) ;
- ReadBytes(f,ADR(r),1,act) ;
- ReadBytes(f,ADR(s),1,act) ;
- SetRGB4(ADR(scr^.viewPort),col,r,g,b) ;
- END ;
-
- Close(f) ;
- END ReadPAL ;
-
-
-
- PROCEDURE CPUCopy(scr : ScreenPtr ; source : ADDRESS ;
- dest : ADDRESS ;
- w,h,xd,yd : LONGINT) ;
- VAR x,y,sw : LONGINT ;
- dst{R.A1},
- srt{R.A0} : ADDRESS ;
-
- BEGIN
- sw := scr^.width ;
- INC(dest,xd) ;
- INC(dest,sw*yd) ;
- WaitVillageBlit ;
- FOR y:=1 TO h DO
- FOR x:=1 TO w DO
- dest^ := source^ ;
- INC(dest,1) ;
- INC(source,1) ;
- END ;
- INC(dest,sw-w) ;
- END ;
-
- END CPUCopy ;
-
-
-
- BEGIN
- InstallException ;
-
- (*
- mode := VillageModeRequest(TAG(tags,tavisMinDepth, 8,
- tavisMaxDepth, 8,
- tavisMinHeight, 256,
- tagDone)) ;
- Assert(mode#InvalidID,ADR("Kein Screenmode gewählt !")) ;
- *)
- scr := OpenVillageScreenTagList(TAG(tags,tavisScreenWidth, 640,
- tavisScreenHeight, 512,
- tavisScreenDepth, 8,
- tagDone)) ;
- Assert(scr#NIL,ADR("Kann PICASSO Screen nicht öffnen !")) ;
-
- start := LockVillageScreen(scr) ;
-
- ReadPAL("sq0:pics/sequenz/auto.0001",scr) ;
-
- kugeln[0] := ReadBMP("pics/sequenz/auto.0001",84,67) ;
- kugeln[1] := ReadBMP("pics/sequenz/auto.0002",84,67) ;
- kugeln[2] := ReadBMP("pics/sequenz/auto.0003",84,67) ;
- kugeln[3] := ReadBMP("pics/sequenz/auto.0004",84,67) ;
- kugeln[4] := ReadBMP("pics/sequenz/auto.0005",84,67) ;
- kugeln[5] := ReadBMP("pics/sequenz/auto.0006",84,67) ;
- kugeln[6] := ReadBMP("pics/sequenz/auto.0007",84,67) ;
- kugeln[7] := ReadBMP("pics/sequenz/auto.0008",84,67) ;
- kugeln[8] := ReadBMP("pics/sequenz/auto.0009",84,67) ;
- kugeln[9] := ReadBMP("pics/sequenz/auto.0010",84,67) ;
-
- Forbid() ;
- ScreenToFront(scr) ;
- start := LockVillageScreen(scr) ;
- Permit() ;
-
- copy.scrPitch := 84 ;
- copy.dstPitch := scr^.width ;
- copy.width := 84 ;
- copy.height := 67 ;
- copy.rop := VilScrCopy ;
-
- Forbid() ;
- StartTime() ;
- FOR x:=0 TO 200 DO
-
- copy.scrAdr := kugeln[x MOD 10] ;
- copy.dstAdr := start ;
-
- WaitVillageBlit ;
- ok := VillageBlitCopy(scr,ADR(copy)) ;
-
- END ;
- StopTime(time) ;
- Permit() ;
- Erg(time) ;
-
-
- Forbid() ;
- StartTime() ;
- FOR x:=0 TO 200 DO
- CPUCopy(scr,kugeln[x MOD 10],
- start,
- 84,67,0,0) ;
- END ;
- StopTime(time) ;
- Permit() ;
- Erg(time) ;
-
-
-
- CLOSE
- IF scr#NIL THEN
- UnLockVillageScreen(scr) ;
- CloseVillageScreen(scr) ;
- END ;
- FOR i:=0 TO 9 DO
- IF kugeln[i]#NIL THEN
- FreeMem(kugeln[i],84*67) ;
- END ;
- END ;
-
- END BlitTest1.
-